﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EntitiesLayer
{
    /// <summary>
    /// Registrar: por medio del usuario o referencia
    /// Eliminar: no esta establecido. Podria haber un repositorio para telefonos de usuario y otro para referencias
    /// </summary>
    public sealed class Telefono :IEntity
    {
        private readonly int idTelefono;
        public int Id
        {
            get { return idTelefono; }
        }

        private readonly int idEntidadRelacionada;

        public int IdEntidadRelacionada
        {
            get { return idEntidadRelacionada; }
        } 

       
        private readonly string numeroTelefono;

        public string NumeroTelefono
        {
            get { return numeroTelefono; }
        }

        private readonly string tipo;

        public string Tipo
        {
            get { return tipo; }
        }


        public Telefono(int idEntidadRelacionada, string numeroTelefono, string tipo, int idTelefono = 0)
        {
            ValidarNull(numeroTelefono);
            ValidarNull(tipo);

            this.idTelefono = idTelefono;
            this.numeroTelefono = numeroTelefono;
            this.tipo = tipo;
            this.idEntidadRelacionada = idEntidadRelacionada;
        }

        public Telefono(int idTelefono) : this(0, "(506)22-3344-434", "Celular", idTelefono) { }

        public Telefono(int idEntidadRelacionada, string numeroTelefono)
            : this(idEntidadRelacionada, numeroTelefono, "Celular") { }

        public Telefono cambiarNumero(string numero)
        {

            return new Telefono(IdEntidadRelacionada, numero, Tipo, Id);
        }

        public Telefono cambiarTipo(string tipo) {

            return new Telefono(IdEntidadRelacionada, NumeroTelefono, Tipo, Id);
        }

        public Telefono cambiarRelacion(int idRelacion) {
            
            return new Telefono(idRelacion, NumeroTelefono, Tipo, Id);
        }

        public void ValidarNull(string val)
        {
            if ((val == null || val.Equals("")))
                throw new ArgumentNullException();
        }

        public override string ToString()
        {
            return 
                NumeroTelefono+"    "+Tipo;
        }
    }
}
